<?php
/**
 * 程序启动引擎\bootstrap
 * @package    \
 * @author     HuangYi
 * @copyright  Copyright (c) 2011-07-01——2013-03-30
 * @license    New BSD License
 * @version    $Id: \bootstrap.php 版本号 2013-03-30 $
 */
if(!defined('INDEX'))  exit();
//检查php的版本号
if(version_compare(PHP_VERSION, '5.3.5') < 0) exit('MonkeyPHP目前只能运行在【PHP 5.3.5】及以上的环境下，请升级你的php版本.');
/***************** 定义常量 *****************/

//调试级别
define('DEBUG',E_ALL ^ E_NOTICE ^ E_WARNING);
//define('DEBUG',0);

//定义程序代码访问的目录
define('SYSTEM',str_replace(DIRECTORY_SEPARATOR, '/', dirname(__FILE__)));//系统目录
define('FRAME',SYSTEM.'/Monkey');//框架目录
define('MODULE',SYSTEM.'/module');//模块目录
define('PLUGIN',SYSTEM.'/plugin');//插件目录
define('TEMP',SYSTEM.'/temp');//临时缓存目录
define('STATICS',INDEX.'/statics');//静态公共目录（后台程序访问）

//定义其它常量
define('__VERSION__', '0.0-2013.04.01');
define('TIME', $_SERVER['REQUEST_TIME']);//请求时间
define('IS_AJAX',isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest');//AJAX请求标志

/***************** 载入公共函数 *****************/
require FRAME.'/function.php';
//ddos拦截防御
interceptDDOS();

/***************** 检测并修正运行环境 *****************/
//去掉(还原)因为magic_quotes_gpc开启时加上的转义字符，当 magic_quotes_gpc (GPC, Get/Post/Cookie) 打开时，GPC所有的 ' (单引号), " (双引号), \ (反斜线) and 空字符会自动转为含有反斜线的转义字符。
if(get_magic_quotes_gpc()){
    $_POST=stripslashesOfDeep($_POST);
    $_GET=stripslashesOfDeep($_GET);
    $_COOKIE=stripslashesOfDeep($_COOKIE);
}
//修复IIS服务器$_SERVER['DOCUMENT_ROOT']失效的情况
$root=$_SERVER['DOCUMENT_ROOT'];
if(empty($root) && !empty($_SERVER['SCRIPT_FILENAME'])) {
    $root = str_replace( '\\', '/', substr($_SERVER['SCRIPT_FILENAME'], 0, 0 - strlen($_SERVER['PHP_SELF'])));
}
if(empty($root) && !empty($_SERVER['PATH_TRANSLATED'])) {
    $root = str_replace( '\\', '/', substr(str_replace('\\\\', '\\', $_SERVER['PATH_TRANSLATED']), 0, 0 - strlen($_SERVER['PHP_SELF'])));
}
//修正DOCUMENT_ROOT末尾可能因为apache配置造成多余一个'/'。
$_SERVER['DOCUMENT_ROOT']=dirFormat($root);
//定义浏览器访问的目录
define('__INDEX__',$root==INDEX?'':substr(INDEX, strlen($root)));//入口文件的网址目录
define('__STATICS__', __INDEX__.'/statics');//静态公共目录

/***************** 自动加载 *****************/
function  __monkeyAutoload($class) {   // convert namespace to full file path
    $class = SYSTEM.'/' . str_replace('\\', '/', $class) . '.php';
    require_once($class);
}
spl_autoload_register('__monkeyAutoload');
/***************** 载入框架的快捷方式 *****************/
require FRAME.'/shortcut.php';

/***************** 统一处理错误和异常 *****************/
require(FRAME.'/MonkeyException.php');
error_reporting(DEBUG);
if(DEBUG){
    //系统默认异常处理函数
    function __monkeyExceptionHandler(Exception $e) {
        throw new MonkeyException($e->getMessage(),$e->getCode(),$e->getFile(),$e->getLine());
    }
    //系统默认错误处理函数
    function __monkeyErrorHandler($code,$message,$file,$line) {
        throw new MonkeyException($message,$code,$file,$line);
    }
    //注册系统默认异常处理函数
    set_exception_handler('__monkeyExceptionHandler');
    //注册系统默认错误处理函数
    set_error_handler('__monkeyErrorHandler',DEBUG);
}

/***************** 载入应用 *****************/
/**
 *这段在写了安装程序之后使用
    $APP=null;
    //安装文件锁
    $file=SYSTEM.'/install/installed.lock';
    if(file_exists($file)){
        //启动cms
        $APP=new App();
    }else{
        //启动安装程序
        $APP=new install\App();
    }
 */
$APP=new App();
/***************** 运行应用 *****************/
oApp($APP)->run();

